"""
WebSocket 服务接口
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, Optional, Callable


class IWebSocketService(ABC):
    """
    WebSocket 服务接口，定义 WebSocket 服务的功能
    """
    
    @abstractmethod
    def connect(self, url: str) -> bool:
        """
        连接到 WebSocket 服务器
        
        @param url: WebSocket 服务器 URL
        @return: 是否成功连接
        """
        pass
    
    @abstractmethod
    def disconnect(self) -> bool:
        """
        断开与 WebSocket 服务器的连接
        
        @return: 是否成功断开连接
        """
        pass
    
    @abstractmethod
    def is_connected(self) -> bool:
        """
        检查是否已连接到 WebSocket 服务器
        
        @return: 是否已连接
        """
        pass
    
    @abstractmethod
    def send_message(self, message: Dict[str, Any]) -> bool:
        """
        发送消息到 WebSocket 服务器
        
        @param message: 要发送的消息
        @return: 是否成功发送
        """
        pass
    
    @abstractmethod
    def get_connection_status(self) -> str:
        """
        获取连接状态
        
        @return: 连接状态字符串
        """
        pass
    
    @abstractmethod
    def configure(self, config: Dict[str, Any]) -> None:
        """
        配置 WebSocket 服务
        
        @param config: 配置字典
        """
        pass
     
    @abstractmethod
    def set_comment_service(self, comment_service) -> None:
        """
        设置评论服务
        
        @param comment_service: 评论服务实例
        """
        pass
    
    # 新增方法 - 服务端功能
    @abstractmethod
    def start_server(self, port: int = 8080) -> bool:
        """
        启动 WebSocket 服务器
        
        @param port: 服务器端口
        @return: 是否成功启动
        """
        pass
    
    @abstractmethod
    def stop_server(self) -> bool:
        """
        停止 WebSocket 服务器
        
        @return: 是否成功停止
        """
        pass
    
    @abstractmethod
    def is_server_running(self) -> bool:
        """
        检查服务器是否运行中
        
        @return: 服务器是否运行
        """
        pass
    
    # 新增方法 - 表情转换
    @abstractmethod
    def convert_emoji(self, text: str) -> str:
        """
        转换文本中的表情符号
        
        @param text: 包含表情符号的文本
        @return: 转换后的文本
        """
        pass
    
    # 新增方法 - 添加消息监听器
    @abstractmethod
    def add_message_listener(self, listener: Callable[[Dict[str, Any]], None]) -> None:
        """
        添加消息监听器
        
        @param listener: 消息监听器函数
        """
        pass
    
    # 新增方法 - 移除消息监听器
    @abstractmethod
    def remove_message_listener(self, listener: Callable[[Dict[str, Any]], None]) -> None:
        """
        移除消息监听器
        
        @param listener: 消息监听器函数
        """
        pass 